package br.com.sol.persistencia;

import java.util.Date;
import java.util.LinkedList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.widget.Toast;
import br.com.sol.model.Contato;

public class ContatoDAO extends DAO<Contato>{

	public ContatoDAO(Context context) {
		super(context);
	}

	@Override
	public long insert(Contato obj) {
		ContentValues values = new ContentValues();
		values.put("name", obj.getNome());
		values.put("email", obj.getEmail());
		values.put("telefone", obj.getTelefone());
		values.put("data_nascimento", obj.getDataNascimento().getTime());
		values.put("genero", obj.getGenero());
		values.put("relacionamento", obj.getRelacionamento());
		open();
		long idContato = database.insert(Contato.TABLE_NAME, null, values);
		close();
		return idContato;
	}

	@Override
	public boolean update(Contato obj) {
		try{
			ContentValues values = new ContentValues();
			values.put("name", obj.getNome());
			values.put("email", obj.getEmail());
			values.put("telefone", obj.getTelefone());
			values.put("data_nascimento", obj.getDataNascimento().getTime());
			values.put("genero", obj.getGenero());
			values.put("relacionamento", obj.getRelacionamento());
			open();
			int rows = database.update(Contato.TABLE_NAME, values, "id_contato="+obj.getIdContato(), null);
			close();
			return (rows > 0);
		}catch(Exception exception){
			Toast.makeText(null, exception.getMessage(), Toast.LENGTH_SHORT).show();
			return false;
		}
	}

	@Override
	public boolean delete(Contato obj) {
		try{
			int rows = database.delete(Contato.TABLE_NAME, "id_contato="+obj.getIdContato(), null);
			return (rows > 0);
		}catch(Exception exception){
			Toast.makeText(null, exception.getMessage(), Toast.LENGTH_SHORT).show();
			return false;
		}
	}

	@Override
	public List<Contato> select(Contato obj) {
		List<Contato> list = new LinkedList<Contato>();
		open();
		
		Cursor cursor;
		if(obj.getIdContato() > 0){
        	cursor = database.query(Contato.TABLE_NAME, null, null, null, null, null, null);
		}else{
			cursor = database.query(Contato.TABLE_NAME, null, null, null, null, null, null);
		}
        	
        if (cursor.moveToFirst()) {
        	do {
            	Contato contato = new Contato();
            	contato.setIdContato(Integer.parseInt(cursor.getString(cursor.getColumnIndexOrThrow("id_contato"))));
            	contato.setNome(cursor.getString(cursor.getColumnIndexOrThrow("name")));
            	contato.setEmail(cursor.getString(cursor.getColumnIndexOrThrow("email")));
            	contato.setTelefone(cursor.getString(cursor.getColumnIndexOrThrow("telefone")));
            	contato.setDataNascimento(new Date(cursor.getLong(cursor.getColumnIndexOrThrow("data_nascimento"))));
            	contato.setGenero(cursor.getString(cursor.getColumnIndexOrThrow("genero")));
            	contato.setRelacionamento(cursor.getString(cursor.getColumnIndexOrThrow("relacionamento")));
            	list.add(contato);
        	} while (cursor.moveToNext());
        }
        if (cursor != null && !cursor.isClosed()) {
        	cursor.close();
        }
        close();
        return list;
	}

	@Override
	public Integer getLastId() {
		// TODO Auto-generated method stub
		return null;
	}
	
	

}
